package BouncingBallPackage model BouncingMass BouncingBallPackage.FallingMass fallingmass1 annotation(Placement(visible = true, transformation(origin = {-11.9595,40.4784}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a annotation(Placement(visible = true, transformation(origin = {-90.8924,-4.59982}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {-90.8924,-4.59982}, extent = {{-12,-12},{12,12}}, rotation = 0))); annotation(Diagram(), Icon()); Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b annotation(Placement(visible = true, transformation(origin = {94.9402,-1.65593}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {94.9402,-1.65593}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Blocks.Interfaces.RealOutput s annotation(Placement(visible = true, transformation(origin = {98.6201,-26.127}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {98.6201,-26.127}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Blocks.Interfaces.RealOutput v annotation(Placement(visible = true, transformation(origin = {93.2843,-46.1822}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {93.2843,-46.1822}, extent = {{-12,-12},{12,12}}, rotation = 0))); equation connect(fallingmass1.v,v) annotation(Line(points = {{-0.544596,35.0469},{84.0846,35.0469},{84.0846,-46.1822},{93.2843,-46.1822}})); connect(fallingmass1.s,s) annotation(Line(points = {{-0.279648,38.3146},{89.6044,38.3146},{89.6044,-26.127},{98.6201,-26.127}})); connect(fallingmass1.flange_b,flange_b) annotation(Line(points = {{-2.0239,41.4278},{94.0202,41.4278},{94.0202,-1.65593},{94.9402,-1.65593}})); connect(flange_a,fallingmass1.flange_a) annotation(Line(points = {{-90.8924,-4.59982},{-21.8951,-4.59982},{-21.8951,41.1849},{-21.7847,41.1849}})); when s <= 0 then reinit(fallingmass1.mass.v, -fallingmass1.mass.v * 0.5); end when; end BouncingMass; model BouncingBallEquations Real v; Real p(start = 10); constant Real g = -9.81; parameter Real m = 10; equation der(v) = g; der(p) = v; when p <= 0 then reinit(v, -v * 0.5); end when; end BouncingBallEquations; model BouncingMassLibrary Modelica.Mechanics.Translational.Components.Mass mass(m = 1, s(start = 10)) annotation(Placement(visible = true, transformation(origin = {29.2548,52.2539}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Mechanics.Translational.Sources.Force gravitationalForce annotation(Placement(visible = true, transformation(origin = {-16.1914,53.3579}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Blocks.Sources.Constant gravitationalAcceleration(k = -9.81) annotation(Placement(visible = true, transformation(origin = {-56.8537,52.4379}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a annotation(Placement(visible = true, transformation(origin = {-81.8767,5.88776}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {-81.8767,5.88776}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b annotation(Placement(visible = true, transformation(origin = {82.7967,7.91168}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {82.7967,7.91168}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Mechanics.Translational.Sensors.PositionSensor positionsensor annotation(Placement(visible = true, transformation(origin = {55.7498,-14.5354}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Mechanics.Translational.Sensors.SpeedSensor speedsensor annotation(Placement(visible = true, transformation(origin = {54.8298,-43.6063}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Blocks.Interfaces.RealOutput s annotation(Placement(visible = true, transformation(origin = {97.3321,-18.0313}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {97.3321,-18.0313}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Blocks.Interfaces.RealOutput v annotation(Placement(visible = true, transformation(origin = {95.1242,-45.2622}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {95.1242,-45.2622}, extent = {{-12,-12},{12,12}}, rotation = 0))); equation connect(mass.flange_b,speedsensor.flange) annotation(Line(points = {{41.2548,52.2539},{42.6863,52.2539},{42.6863,-43.6063},{42.8298,-43.6063}})); connect(mass.flange_b,positionsensor.flange) annotation(Line(points = {{41.2548,52.2539},{43.2383,52.2539},{43.2383,-14.5354},{43.7498,-14.5354}})); connect(speedsensor.v,v) annotation(Line(points = {{68.0298,-43.6063},{89.6044,-43.6063},{89.6044,-45.2622},{95.1242,-45.2622}})); connect(positionsensor.s,s) annotation(Line(points = {{68.9498,-14.6554},{88.3165,-14.6554},{88.3165,-18.0313},{97.3321,-18.0313}})); connect(mass.flange_a,flange_a) annotation(Line(points = {{17.2548,52.2539},{16.7433,52.2539},{16.7433,5.88776},{-81.8767,5.88776}})); connect(mass.flange_b,flange_b) annotation(Line(points = {{41.2548,52.2539},{81.8767,52.2539},{81.8767,7.91168},{82.7967,7.91168}})); assert(mass.m > 0, "out of domain of validity"); connect(gravitationalAcceleration.y,gravitationalForce.f) annotation(Line(points = {{-43.6537,52.4379},{-32.3827,52.4379},{-32.3827,53.3579},{-30.5914,53.3579}})); connect(gravitationalForce.flange,mass.flange_a) annotation(Line(points = {{-4.19135,53.3579},{17.1113,53.3579},{17.1113,52.2539},{17.2548,52.2539}})); when s <= 0 then reinit(mass.v, -mass.v * 0.5); end when; end BouncingMassLibrary; model FallingMass Modelica.Mechanics.Translational.Components.Mass mass(m = 1, s(start = 10)) annotation(Placement(visible = true, transformation(origin = {29.2548,52.2539}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Mechanics.Translational.Sources.Force gravitationalForce annotation(Placement(visible = true, transformation(origin = {-16.1914,53.3579}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Blocks.Sources.Constant gravitationalAcceleration(k = -9.81) annotation(Placement(visible = true, transformation(origin = {-56.8537,52.4379}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a annotation(Placement(visible = true, transformation(origin = {-81.8767,5.88776}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {-81.8767,5.88776}, extent = {{-12,-12},{12,12}}, rotation = 0))); annotation(Diagram(), Icon()); Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b annotation(Placement(visible = true, transformation(origin = {82.7967,7.91168}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {82.7967,7.91168}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Mechanics.Translational.Sensors.PositionSensor positionsensor annotation(Placement(visible = true, transformation(origin = {55.7498,-14.5354}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Mechanics.Translational.Sensors.SpeedSensor speedsensor annotation(Placement(visible = true, transformation(origin = {54.8298,-43.6063}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Blocks.Interfaces.RealOutput s annotation(Placement(visible = true, transformation(origin = {97.3321,-18.0313}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {97.3321,-18.0313}, extent = {{-12,-12},{12,12}}, rotation = 0))); Modelica.Blocks.Interfaces.RealOutput v annotation(Placement(visible = true, transformation(origin = {95.1242,-45.2622}, extent = {{-12,-12},{12,12}}, rotation = 0), iconTransformation(origin = {95.1242,-45.2622}, extent = {{-12,-12},{12,12}}, rotation = 0))); equation connect(mass.flange_b,speedsensor.flange) annotation(Line(points = {{41.2548,52.2539},{42.6863,52.2539},{42.6863,-43.6063},{42.8298,-43.6063}})); connect(mass.flange_b,positionsensor.flange) annotation(Line(points = {{41.2548,52.2539},{43.2383,52.2539},{43.2383,-14.5354},{43.7498,-14.5354}})); connect(speedsensor.v,v) annotation(Line(points = {{68.0298,-43.6063},{89.6044,-43.6063},{89.6044,-45.2622},{95.1242,-45.2622}})); connect(positionsensor.s,s) annotation(Line(points = {{68.9498,-14.6554},{88.3165,-14.6554},{88.3165,-18.0313},{97.3321,-18.0313}})); connect(mass.flange_a,flange_a) annotation(Line(points = {{17.2548,52.2539},{16.7433,52.2539},{16.7433,5.88776},{-81.8767,5.88776}})); connect(mass.flange_b,flange_b) annotation(Line(points = {{41.2548,52.2539},{81.8767,52.2539},{81.8767,7.91168},{82.7967,7.91168}})); assert(mass.m > 0, "out of domain of validity"); connect(gravitationalAcceleration.y,gravitationalForce.f) annotation(Line(points = {{-43.6537,52.4379},{-32.3827,52.4379},{-32.3827,53.3579},{-30.5914,53.3579}})); connect(gravitationalForce.flange,mass.flange_a) annotation(Line(points = {{-4.19135,53.3579},{17.1113,53.3579},{17.1113,52.2539},{17.2548,52.2539}})); end FallingMass; end BouncingBallPackage;